package com.lufei.message_system.Data.MbtiTypeDescriptionVD;

import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

@Data
@Schema(name = "MBTI类型创建DTO", description = "用于创建MBTI类型描述的请求参数")
public class MbtiTypeDescriptionCreateDTO {
    @JsonProperty("mbtiType")
    @NotBlank(message = "MBTI类型不能为空")
    @Pattern(regexp = "^(INTJ|INTP|ENTJ|ENTP|INFJ|INFP|ENFJ|ENFP|ISFJ|ISFP|ESFJ|ESFP|ISTJ|ISTP|ESTJ|ESTP)$",
            message = "MBTI类型必须是允许的16种类型之一")
    @Schema(description = "MBTI类型", requiredMode = Schema.RequiredMode.REQUIRED,
            example = "INTJ", allowableValues = {
            "INTJ", "INTP", "ENTJ", "ENTP", "INFJ", "INFP",
            "ENFJ", "ENFP", "ISFJ", "ISFP", "ESFJ", "ESFP",
            "ISTJ", "ISTP", "ESTJ", "ESTP"})
    private String mbtiType;

    @JsonProperty("typeName")
    @NotBlank(message = "类型名称不能为空")
    @Size(max = 50, message = "类型名称长度不能超过50个字符")
    @Pattern(regexp = "^(建筑师|逻辑学家|指挥官|辩论家|调停者|保护者|探险家|观察者|成就者|执行者|监督者|协调者|分析者|创新者|管理员|企业家)$", message = "类型名称必须是允许的16种类型之一")
    @Schema(description = "类型名称（支持精确查询）", example = "建筑师",
            allowableValues = {"建筑师", "逻辑学家", "指挥官", "辩论家", "调停者", "保护者", "探险家", "观察者", "成就者", "执行者", "监督者", "协调者", "分析者", "创新者", "管理员", "企业家"})
    private String typeName;

    @JsonProperty("description")
    @NotBlank(message = "描述内容不能为空")
    @Size(max = 2000, message = "描述内容长度不能超过2000个字符")
    @Schema(description = "类型详细描述", requiredMode = Schema.RequiredMode.REQUIRED,
            example = "建筑师（INTJ）是内向、直觉、思考、判断型人格。")
    private String description;

    @JsonProperty("model")
    @NotBlank(message = "模式不能为空")
    @Size(max = 2000, message = "模式内容长度不能超过2000个字符")
    @Schema(description = "模式", requiredMode = Schema.RequiredMode.REQUIRED)
    private String model;

    @JsonProperty("workEnvironmentPreferences")
    @NotBlank(message = "工作环境倾向性不能为空")
    @Size(max = 2000, message = "工作环境倾向性长度不能超过2000个字符")
    @Schema(description = "工作环境倾向性", requiredMode = Schema.RequiredMode.REQUIRED)
    private String workEnvironmentPreferences;

    @JsonProperty("weakness")
    @NotBlank(message = "缺点不能为空")
    @Size(max = 2000, message = "缺点内容长度不能超过2000个字符")
    @Schema(description = "缺点", requiredMode = Schema.RequiredMode.REQUIRED)
    private String weakness;

    @JsonProperty("developmentSuggestions")
    @NotBlank(message = "发展建议不能为空")
    @Size(max = 2000, message = "发展建议长度不能超过2000个字符")
    @Schema(description = "发展建议", requiredMode = Schema.RequiredMode.REQUIRED)
    private String developmentSuggestions;

    @JsonProperty("filed")
    @NotBlank(message = "适合的领域不能为空")
    @Size(max = 2000, message = "适合的领域长度不能超过2000个字符")
    @Schema(description = "适合的领域", requiredMode = Schema.RequiredMode.REQUIRED)
    private String filed;

    @JsonProperty("career")
    @NotBlank(message = "适合的职业不能为空")
    @Size(max = 2000, message = "适合的职业长度不能超过2000个字符")
    @Schema(description = "适合的职业", requiredMode = Schema.RequiredMode.REQUIRED)
    private String career;
}